import { Message } from "element-ui";

export const copyDirective = {
  bind(el, binding) {
    // 定义存储复制内容的变量（关键：使用copyText而非text）
    let copyText = "";
    let successMsg = "复制成功";
    let errorMsg = "复制失败，请手动复制";

    // 处理绑定值
    if (typeof binding.value === "object") {
      copyText = binding.value.text || "";
      successMsg = binding.value.successMsg || successMsg;
      errorMsg = binding.value.errorMsg || errorMsg;
    } else {
      copyText = binding.value ? String(binding.value) : "";
    }

    // 点击事件处理函数
    el.handleClick = () => {
      // 验证复制内容
      if (!copyText) {
        Message.warning("没有可复制的内容");
        return;
      }

      // 创建临时文本框
      const textarea = document.createElement("textarea");
      textarea.value = copyText; // 赋值要复制的内容

      // 隐藏文本框
      textarea.style.position = "fixed";
      textarea.style.top = "-999px";
      textarea.style.left = "-999px";

      // 添加到页面
      document.body.appendChild(textarea);

      // 选中内容（关键修复：使用copyText变量）
      textarea.select();
      textarea.setSelectionRange(0, copyText.length); // 这里之前错误地使用了text

      try {
        // 执行复制
        const isSuccess = document.execCommand("copy");
        if (isSuccess) {
          Message.success(successMsg);
        } else {
          Message.error(errorMsg);
        }
      } catch (err) {
        console.error("复制失败:", err);
        Message.error(errorMsg);
      } finally {
        // 清理临时元素
        document.body.removeChild(textarea);
      }
    };

    // 绑定点击事件
    el.addEventListener("click", el.handleClick);
  },

  // 解绑时移除事件监听
  unbind(el) {
    el.removeEventListener("click", el.handleClick);
  },
};

// 注册指令
export function registerCopyDirective(Vue) {
  Vue.directive("copy", copyDirective);
}
